/*
 * Created by zhangzxiang91@gmail.com on 2021/09/14.
 */
package com.perfma.util.exception;

import org.apache.commons.lang3.StringUtils;

import java.io.Serializable;

/**
 * 底层框架通用异常基类
 *
 * @author zhangzxiang91@gmail.com
 * @date 2021/09/14.
 */
public class PerfmaException extends RuntimeException implements Serializable {

	/**
	 * 错误信息
	 */
	private String  message;
	/**
	 * 是否运行时异常
	 */
	private boolean runtime;

	/**
	 * RPC调用时异常还原需要用到无参构造函数
	 */
	public PerfmaException() {
	}

	/**
	 * 当带有参数时，文本将通过 String.format 进行相应格式化
	 *
	 * @param message 错误信息
	 * @param formatArgs 错误信息格式参数 {@link String#format(String, Object...)}
	 */
	public PerfmaException(String message, Object... formatArgs) {
		this.message = String.format(message, formatArgs);
		this.runtime = false;
	}

	/**
	 * 包装运行时异常
	 *
	 * @param e 原始异常对象
	 */
	public PerfmaException(Throwable e) {
		super(e);
		this.message = StringUtils.join(e.getClass().getName(), " - ", e.getMessage());
		this.runtime = true;
	}

	@Override
	public Throwable fillInStackTrace() {
		return this;
	}

	/**
	 * 错误信息
	 */
	public String getMessage() {
		return this.message;
	}

	/**
	 * 是否运行时异常
	 */
	public boolean isRuntime() {
		return this.runtime;
	}
}
